package org.ma1.cripto.aes.interfaz;

import java.io.BufferedReader;
import java.io.StringReader;
import java.util.Iterator;
import java.util.StringTokenizer;

import org.ma1.cripto.aes.comun.Bloque;
import org.ma1.cripto.aes.comun.Texto;

public class TransformadorHexadecimal implements ITransformador {

	public Texto transformar(String texto) {
		BufferedReader br = new BufferedReader(new StringReader(texto));
		String linea = null;
		Texto txt = new Texto(); 
		try {
			while ((linea = br.readLine()) != null) {
				if (!linea.equals("")) {
					Bloque bloque = new Bloque();
					int cont=0;
					linea = linea.substring(linea.indexOf(':')+1);
					StringTokenizer st = new StringTokenizer(linea);
					while (st.hasMoreTokens()) {
						String token = st.nextToken();
						byte b = (byte)( (byte)Integer.parseInt(token, 16) & 0xFF );
						bloque.setByte(cont,b);
						cont++;
					}
					txt.getBloques().add(bloque);
				}
			}
		
		} catch (Exception e) {
			e.printStackTrace();
		}
		return txt;
	}

	public String transformarInverso(Texto texto) {
		String ret = "";
		Iterator<Bloque> it = texto.getBloques().iterator();
		while(it.hasNext()) {
			ret += procesarBloqueInverso(it.next());
		}
		return ret;
	}

	private String procesarBloqueInverso(Bloque bloque) {
		String ret = "";
		for (int k=0; k<bloque.getTamBloque(); k++) {
			byte b = bloque.getByte(k);
			ret += (char)b;
		}
		return ret;
	}

}
